Skip to content

refactor!: make IStringMatchType asynchronous#787

Merged
vbreuss merged 1 commit intomainfrom
topic/make-istringmatchtype-async
Sep 15, 2025
Merged

refactor!: make IStringMatchType asynchronous#787
vbreuss merged 1 commit intomainfrom
topic/make-istringmatchtype-async

Conversation

@vbreuss
Copy link
Copy Markdown
Member

@vbreuss vbreuss commented Sep 15, 2025

This pull request refactors the IStringMatchType interface to make the AreConsideredEqual method asynchronous, changing the return type from bool to Task<bool> for .NET Standard 2.0 and ValueTask<bool> for .NET 8.0+. This is a breaking change that modernizes the API to support async-first patterns.

Key changes include:

  • Interface method signature updated to return asynchronous types
  • All implementations updated to return wrapped task results
  • Calling code updated to use async/await patterns

@vbreuss vbreuss self-assigned this Sep 15, 2025
Copilot AI review requested due to automatic review settings September 15, 2025 12:26
@vbreuss vbreuss added the refactor A change or improvement without functional impact label Sep 15, 2025
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This pull request refactors the IStringMatchType interface to make the AreConsideredEqual method asynchronous, changing the return type from bool to Task<bool> for .NET Standard 2.0 and ValueTask<bool> for .NET 8.0+. This is a breaking change that modernizes the API to support async-first patterns.

Key changes include:

  • Interface method signature updated to return asynchronous types
  • All implementations updated to return wrapped task results
  • Calling code updated to use async/await patterns

Reviewed Changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
Tests/aweXpect.Core.Api.Tests/Expected/aweXpect.Core_netstandard2.0.txt Updates API expectations to reflect Task return type
Tests/aweXpect.Core.Api.Tests/Expected/aweXpect.Core_net8.0.txt Updates API expectations to reflect ValueTask return type
Source/aweXpect.Core/Options/StringEqualityOptions.cs Updates calling code to use async/await pattern
Source/aweXpect.Core/Core/IStringMatchType.cs Changes interface method to return Task/ValueTask
Source/aweXpect.Core/Options/StringEqualityOptions.*.cs Updates all match type implementations to wrap synchronous results in tasks

@vbreuss vbreuss added the breaking change The changes require a new major version label Sep 15, 2025
@vbreuss vbreuss enabled auto-merge (squash) September 15, 2025 12:31
@sonarqubecloud
Copy link
Copy Markdown

@github-actions
Copy link
Copy Markdown
Contributor

Test Results

    14 files   - 24      14 suites   - 24   5m 19s ⏱️ + 1m 29s
17 864 tests  - 27  17 862 ✅  - 27  2 💤 ±0  0 ❌ ±0 
50 256 runs   - 72  50 254 ✅  - 72  2 💤 ±0  0 ❌ ±0 

Results for commit 85cf2fd. ± Comparison against base commit 904d8ac.

This pull request removes 1566 and adds 1539 tests. Note that renamed tests count towards both.
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "message0e436b97-d007-438b-a2ab-3aa52f96f1d9")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "message106fac2a-274f-4ff1-93d1-d183749f0389")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "message5794f112-60a3-4ccc-ac17-d6ae118ab837")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message0829ea50-7afe-4c0a-9da4-606e3613bf7e")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message2c6902db-3c44-4ed7-8622-c9756f379bb0")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message36e7432d-18d4-4eeb-8517-962eb4d42a84")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reason00e4c91b-f5a3-47ff-8f0c-e84ca618a5db")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reasonb1c6d765-6af7-4639-b133-d74b4ca78fa7")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reasonecabc43a-5e03-4da6-968b-41f4f1f72a0c")
aweXpect.Core.Tests.FailTests ‑ Unless_ShouldThrowException(condition: False, reason: "reason62341b8e-85a4-490d-a431-b277816b20a0")
…
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "message55bd5b95-8ff1-4c6e-b71d-f0e1dfc255f9")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "message7d66c4eb-af9b-48da-a8d4-68e432dfe548")
aweXpect.Core.Tests.Core.Exceptions.FailExceptionTests ‑ Message_ShouldBeSet(message: "messageaf8f5edc-8f52-4eda-8ac9-4ba46cda6cf7")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message2fb73cd1-e7a5-4553-be40-83e1ada24dcb")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message80ba526f-4d54-459a-a8e0-a67f5cbdf272")
aweXpect.Core.Tests.Core.Exceptions.SkipExceptionTests ‑ Message_ShouldBeSet(message: "message88733efb-6cc7-40a4-9323-3ab9a94ce8f2")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reason0b179156-2f2f-449a-b657-9df9a1c6b1b4")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reasonc57de04f-860f-42c7-a293-18a7feb8acd9")
aweXpect.Core.Tests.FailTests ‑ Test_ShouldThrowException(reason: "reasonfaa4fbe1-69df-4fd6-9866-2ab4936890e1")
aweXpect.Core.Tests.FailTests ‑ Unless_ShouldThrowException(condition: False, reason: "reason485a5e6c-670c-4821-a749-fec489c999e3")
…

@vbreuss vbreuss merged commit 6545f65 into main Sep 15, 2025
14 checks passed
@vbreuss vbreuss deleted the topic/make-istringmatchtype-async branch September 15, 2025 12:36
github-actions Bot added a commit that referenced this pull request Sep 15, 2025
github-actions Bot added a commit that referenced this pull request Sep 15, 2025
@github-actions
Copy link
Copy Markdown
Contributor

🚀 Benchmark Results

Details

BenchmarkDotNet v0.14.0, Ubuntu 24.04.3 LTS (Noble Numbat)
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
.NET SDK 8.0.414
[Host] : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2

Job=InProcess Toolchain=InProcessEmitToolchain IterationCount=15
LaunchCount=1 WarmupCount=10

Method Mean Error StdDev Gen0 Gen1 Allocated
Bool_aweXpect 218.7 ns 4.16 ns 3.89 ns 0.0300 - 504 B
Bool_FluentAssertions 245.1 ns 7.08 ns 6.62 ns 0.0567 - 952 B
Bool_TUnit 932.1 ns 10.24 ns 9.08 ns 0.1431 - 2408 B
Equivalency_aweXpect 316,678.3 ns 1,380.22 ns 1,291.06 ns 20.0195 0.9766 335556 B
Equivalency_FluentAssertions 2,222,254.7 ns 4,602.37 ns 4,079.88 ns 273.4375 46.8750 4584416 B
Equivalency_TUnit 709,892.0 ns 3,806.36 ns 3,560.47 ns 51.7578 2.9297 880545 B
Int_GreaterThan_aweXpect 247.9 ns 0.50 ns 0.45 ns 0.0486 - 816 B
Int_GreaterThan_FluentAssertions 236.2 ns 0.32 ns 0.27 ns 0.0730 - 1224 B
Int_GreaterThan_TUnit 1,169.3 ns 6.76 ns 6.33 ns 0.1774 - 2984 B
ItemsCount_AtLeast_aweXpect 493.4 ns 4.68 ns 4.38 ns 0.0868 - 1464 B
ItemsCount_AtLeast_FluentAssertions 475.9 ns 2.55 ns 2.38 ns 0.1192 - 2008 B
ItemsCount_AtLeast_TUnit 19,113.8 ns 71.15 ns 59.41 ns 1.6174 - 27480 B
String_aweXpect 416.5 ns 1.79 ns 1.50 ns 0.0734 - 1232 B
String_FluentAssertions 463.4 ns 2.38 ns 2.22 ns 0.1292 - 2168 B
String_TUnit 1,210.9 ns 4.95 ns 4.39 ns 0.1831 - 3072 B
StringArray_aweXpect 1,740.3 ns 2.76 ns 2.58 ns 0.1717 - 2888 B
StringArray_FluentAssertions 1,279.4 ns 3.03 ns 2.69 ns 0.2480 - 4152 B
StringArray_TUnit 3,198.2 ns 12.98 ns 12.15 ns 0.3128 - 5296 B
StringArrayInAnyOrder_aweXpect 2,174.7 ns 2.77 ns 2.45 ns 0.1831 - 3080 B
StringArrayInAnyOrder_FluentAssertions 150,052.0 ns 295.97 ns 262.37 ns 3.4180 - 63787 B
StringArrayInAnyOrder_TUnit 3,995.2 ns 12.65 ns 11.83 ns 0.3815 - 6488 B

@github-actions
Copy link
Copy Markdown
Contributor

👽 Mutation Results

Mutation testing badge

aweXpect

Details
File Score Killed Survived Timeout No Coverage Ignored Compile Errors Total Detected Total Undetected Total Mutants

The final mutation score is NaN%

Coverage Thresholds: high:80 low:60 break:0

aweXpect.Core

Details
File Score Killed Survived Timeout No Coverage Ignored Compile Errors Total Detected Total Undetected Total Mutants
Options/StringEqualityOptions.cs 96.97% 64 2 0 0 13 22 64 2 101
Options/StringEqualityOptions.ExactMatchType.cs 93.24% 69 5 0 0 17 8 69 5 99
Options/StringEqualityOptions.PrefixMatchType.cs 92.98% 53 3 0 1 15 8 53 4 80
Options/StringEqualityOptions.RegexMatchType.cs 89.47% 17 1 0 1 5 8 17 2 32
Options/StringEqualityOptions.SuffixMatchType.cs 62.50% 40 3 0 21 16 8 40 24 88
Options/StringEqualityOptions.WildcardMatchType.cs 95.83% 23 0 0 1 5 8 23 1 37

The final mutation score is 87.50%

Coverage Thresholds: high:80 low:60 break:0

@github-actions
Copy link
Copy Markdown
Contributor

This is addressed in release v2.25.0.

vbreuss pushed a commit to Testably/aweXpect.Reflection that referenced this pull request May 6, 2026
Updated [aweXpect](https://github.com/aweXpect/aweXpect) from 2.26.0 to 2.31.0.

<details>
<summary>Release notes</summary>

_Sourced from [aweXpect's releases](https://github.com/aweXpect/aweXpect/releases)._

## 2.31.0

## What's Changed
* chore: Bump the xunit group with 2 updates by @​dependabot[bot] in Testably/aweXpect#883
* chore: Bump apexskier/github-release-commenter from 1.3.6 to 1.4.1 by @​dependabot[bot] in Testably/aweXpect#884
* chore: Bump SharpCompress from 0.42.1 to 0.44.3 by @​dependabot[bot] in Testably/aweXpect#886
* docs: support nested directories in extensions by @​vbreuss in Testably/aweXpect#887
* chore: Bump the tunit group with 2 updates by @​dependabot[bot] in Testably/aweXpect#888
* chore: Bump SharpCompress from 0.44.3 to 0.44.5 by @​dependabot[bot] in Testably/aweXpect#889
* chore: Bump actions/upload-artifact from 6 to 7 by @​dependabot[bot] in Testably/aweXpect#898
* chore: Bump actions/download-artifact from 7 to 8 by @​dependabot[bot] in Testably/aweXpect#899
* chore: Bump the mstest group with 2 updates by @​dependabot[bot] in Testably/aweXpect#890
* chore: Bump the nunit group with 1 update by @​dependabot[bot] in Testably/aweXpect#895
* chore: Bump coverlet.collector from 6.0.4 to 8.0.0 by @​dependabot[bot] in Testably/aweXpect#897
* chore: update docusaurus webpage by @​vbreuss in Testably/aweXpect#900
* refactor: fix build warnings by @​vbreuss in Testably/aweXpect#902
* feat: give access to `Timeout` and `CancellationToken` in the `ExpectationBuilder` by @​vbreuss in Testably/aweXpect#901
* chore: Bump Microsoft.Testing.Extensions.CodeCoverage from 18.3.2 to 18.5.2 by @​dependabot[bot] in Testably/aweXpect#906
* chore: Bump Microsoft.NET.Test.Sdk from 18.0.1 to 18.3.0 by @​dependabot[bot] in Testably/aweXpect#905
* chore: Bump the nunit group with 2 updates by @​dependabot[bot] in Testably/aweXpect#903
* chore: bump aweXpect.Core to v2.28.0 by @​vbreuss in Testably/aweXpect#909
* refactor: migrate to slnx format by @​vbreuss in Testably/aweXpect#908


**Full Changelog**: Testably/aweXpect@v2.30.0...v2.31.0

## 2.30.0

## What's Changed
* chore: Bump actions/checkout from 5 to 6 by @​dependabot[bot] in Testably/aweXpect#850
* chore: Bump the mstest group with 2 updates by @​dependabot[bot] in Testably/aweXpect#851
* chore: Bump the tunit group with 3 updates by @​dependabot[bot] in Testably/aweXpect#853
* chore: Bump Microsoft.NET.Test.Sdk from 18.0.0 to 18.0.1 by @​dependabot[bot] in Testably/aweXpect#854
* chore: Bump Microsoft.Testing.Extensions.TrxReport from 2.0.1 to 2.0.2 by @​dependabot[bot] in Testably/aweXpect#855
* chore: update docusaurus dependencies by @​vbreuss in Testably/aweXpect#856
* chore: bump nuke to v10.1.0 by @​vbreuss in Testably/aweXpect#862
* chore: Bump BenchmarkDotNet from 0.15.6 to 0.15.8 by @​dependabot[bot] in Testably/aweXpect#860
* chore: Bump PublicApiGenerator from 11.5.0 to 11.5.3 by @​dependabot[bot] in Testably/aweXpect#861
* chore: Bump PublicApiGenerator from 11.5.3 to 11.5.4 by @​dependabot[bot] in Testably/aweXpect#864
* chore: Bump the nunit group with 1 update by @​dependabot[bot] in Testably/aweXpect#863
* chore: Bump the xunit group with 2 updates by @​dependabot[bot] in Testably/aweXpect#858
* chore: Bump actions/download-artifact from 6 to 7 by @​dependabot[bot] in Testably/aweXpect#866
* chore: Bump actions/upload-artifact from 5 to 6 by @​dependabot[bot] in Testably/aweXpect#867
* chore: Bump the tunit group with 2 updates by @​dependabot[bot] in Testably/aweXpect#868
* chore: Bump SharpCompress from 0.41.0 to 0.42.1 by @​dependabot[bot] in Testably/aweXpect#869
* chore: Bump the nunit group with 1 update by @​dependabot[bot] in Testably/aweXpect#876
* chore: Bump Microsoft.Testing.Extensions.CodeCoverage and 2 others by @​dependabot[bot] in Testably/aweXpect#875
* feat: add implicit conversion to `Times` by @​vbreuss in Testably/aweXpect#878
* chore: Bump TUnit and TUnit.Assertions by @​dependabot[bot] in Testably/aweXpect#879
* feat: support async `Because` reason by @​vbreuss in Testably/aweXpect#880
* chore: bump aweXpect.Core to v2.27.0 by @​vbreuss in Testably/aweXpect#881


**Full Changelog**: Testably/aweXpect@v2.29.0...v2.30.0

## 2.29.0

## What's Changed
* chore: update aweXpect to v2.28.0 by @​vbreuss in Testably/aweXpect#841
* refactor: move needs from pack to push by @​vbreuss in Testably/aweXpect#840
* chore: Bump the tunit group with 2 updates by @​dependabot[bot] in Testably/aweXpect#842
* chore: Bump BenchmarkDotNet from 0.15.5 to 0.15.6 by @​dependabot[bot] in Testably/aweXpect#843
* chore: Bump PublicApiGenerator from 11.4.6 to 11.5.0 by @​dependabot[bot] in Testably/aweXpect#844
* chore: Bump SharpCompress from 0.39.0 to 0.41.0 by @​dependabot[bot] in Testably/aweXpect#845
* feat: add support for .NET 10 by @​vbreuss in Testably/aweXpect#794
* fix: disable failing mutation tests by @​vbreuss in Testably/aweXpect#847
* fix: add attributes only when they are available by @​vbreuss in Testably/aweXpect#846
* chore: bump aweXpect.Core to v2.26.0 by @​vbreuss in Testably/aweXpect#848
* fix: build error with MTP mode of dotnet test by @​vbreuss in Testably/aweXpect#849


**Full Changelog**: Testably/aweXpect@v2.28.0...v2.29.0

## 2.28.0

## What's Changed
* chore: update aweXpect to v2.27.1 by @​vbreuss in Testably/aweXpect#818
* docs: document Mockolate by @​vbreuss in Testably/aweXpect#828
* chore: Bump actions/setup-node from 5 to 6 by @​dependabot[bot] in Testably/aweXpect#819
* chore: Bump actions/download-artifact from 5 to 6 by @​dependabot[bot] in Testably/aweXpect#822
* chore: Bump actions/upload-artifact from 4 to 5 by @​dependabot[bot] in Testably/aweXpect#823
* chore: Bump BenchmarkDotNet from 0.14.0 to 0.15.4 by @​dependabot[bot] in Testably/aweXpect#824
* chore: Bump FluentAssertions from 8.2.0 to 8.8.0 by @​dependabot[bot] in Testably/aweXpect#825
* docs: fix docusaurus warning by @​vbreuss in Testably/aweXpect#829
* chore: Bump Microsoft.NET.Test.Sdk from 17.14.1 to 18.0.0 by @​dependabot[bot] in Testably/aweXpect#826
* chore: Bump Microsoft.Testing.Extensions.CodeCoverage from 17.14.2 to 18.1.0 by @​dependabot[bot] in Testably/aweXpect#827
* chore: update TUnit to v0.88.0 by @​vbreuss in Testably/aweXpect#830
* feat: improve test output for dictionary `ContainsKey` by @​vbreuss in Testably/aweXpect#835
* chore: Bump the xunit group with 2 updates by @​dependabot[bot] in Testably/aweXpect#833
* chore: Bump the nunit group with 1 update by @​dependabot[bot] in Testably/aweXpect#831
* chore: Bump BenchmarkDotNet from 0.15.4 to 0.15.5 by @​dependabot[bot] in Testably/aweXpect#834
* fix: infinite loop in result contexts by @​vbreuss in Testably/aweXpect#836
* fix: use list in `ResultContexts` by @​vbreuss in Testably/aweXpect#837
* feat: include actual and expected context in string contains by @​vbreuss in Testably/aweXpect#838
* chore: update aweXpect.Core to v2.25.2 by @​vbreuss in Testably/aweXpect#839


**Full Changelog**: Testably/aweXpect@v2.27.1...v2.28.0

## 2.27.1

## What's Changed
* fix: formatting of nested types within generic types by @​vbreuss in Testably/aweXpect#815
* refactor: reduce allocations for context by @​vbreuss in Testably/aweXpect#816
* chore: bump aweXpect.Core to v2.25.1 by @​vbreuss in Testably/aweXpect#817


**Full Changelog**: Testably/aweXpect@v2.27.0...v2.27.1

## 2.27.0

## What's Changed
* chore: Bump the xunit group with 3 updates by @​dependabot[bot] in Testably/aweXpect#800
* chore: Bump the mstest group with 2 updates by @​dependabot[bot] in Testably/aweXpect#801
* feat: allow customization of the `MaximumStringLength` by @​vbreuss in Testably/aweXpect#802
* chore: update docusaurus to v3.9.1 by @​vbreuss in Testably/aweXpect#803
* fix: formatting of nullable types by @​vbreuss in Testably/aweXpect#808
* chore: Bump the mstest group with 2 updates by @​dependabot[bot] in Testably/aweXpect#805
* chore: Bump the nunit group with 1 update by @​dependabot[bot] in Testably/aweXpect#806
* chore: update TUnit to v0.70.0 by @​vbreuss in Testably/aweXpect#809
* feat: move framework adapters to source generation by @​vbreuss in Testably/aweXpect#810
* coverage: ensure that `NaN` is considered equal to `NaN` by @​vbreuss in Testably/aweXpect#811
* chore: bump the aweXpect group by @​vbreuss in Testably/aweXpect#812
* chore: update aweXpect.Core to v2.25.0 by @​vbreuss in Testably/aweXpect#813
* feat: support MSTest v4 by @​vbreuss in Testably/aweXpect#814


**Full Changelog**: Testably/aweXpect@v2.26.0...v2.27.0

Commits viewable in [compare view](Testably/aweXpect@v2.26.0...v2.31.0).
</details>

Updated [aweXpect.Core](https://github.com/aweXpect/aweXpect) from 2.24.0 to 2.28.0.

<details>
<summary>Release notes</summary>

_Sourced from [aweXpect.Core's releases](https://github.com/aweXpect/aweXpect/releases)._

## 2.28.0

## What's Changed
* chore: update aweXpect to v2.27.1 by @​vbreuss in Testably/aweXpect#818
* docs: document Mockolate by @​vbreuss in Testably/aweXpect#828
* chore: Bump actions/setup-node from 5 to 6 by @​dependabot[bot] in Testably/aweXpect#819
* chore: Bump actions/download-artifact from 5 to 6 by @​dependabot[bot] in Testably/aweXpect#822
* chore: Bump actions/upload-artifact from 4 to 5 by @​dependabot[bot] in Testably/aweXpect#823
* chore: Bump BenchmarkDotNet from 0.14.0 to 0.15.4 by @​dependabot[bot] in Testably/aweXpect#824
* chore: Bump FluentAssertions from 8.2.0 to 8.8.0 by @​dependabot[bot] in Testably/aweXpect#825
* docs: fix docusaurus warning by @​vbreuss in Testably/aweXpect#829
* chore: Bump Microsoft.NET.Test.Sdk from 17.14.1 to 18.0.0 by @​dependabot[bot] in Testably/aweXpect#826
* chore: Bump Microsoft.Testing.Extensions.CodeCoverage from 17.14.2 to 18.1.0 by @​dependabot[bot] in Testably/aweXpect#827
* chore: update TUnit to v0.88.0 by @​vbreuss in Testably/aweXpect#830
* feat: improve test output for dictionary `ContainsKey` by @​vbreuss in Testably/aweXpect#835
* chore: Bump the xunit group with 2 updates by @​dependabot[bot] in Testably/aweXpect#833
* chore: Bump the nunit group with 1 update by @​dependabot[bot] in Testably/aweXpect#831
* chore: Bump BenchmarkDotNet from 0.15.4 to 0.15.5 by @​dependabot[bot] in Testably/aweXpect#834
* fix: infinite loop in result contexts by @​vbreuss in Testably/aweXpect#836
* fix: use list in `ResultContexts` by @​vbreuss in Testably/aweXpect#837
* feat: include actual and expected context in string contains by @​vbreuss in Testably/aweXpect#838
* chore: update aweXpect.Core to v2.25.2 by @​vbreuss in Testably/aweXpect#839


**Full Changelog**: Testably/aweXpect@v2.27.1...v2.28.0

## 2.27.1

## What's Changed
* fix: formatting of nested types within generic types by @​vbreuss in Testably/aweXpect#815
* refactor: reduce allocations for context by @​vbreuss in Testably/aweXpect#816
* chore: bump aweXpect.Core to v2.25.1 by @​vbreuss in Testably/aweXpect#817


**Full Changelog**: Testably/aweXpect@v2.27.0...v2.27.1

## 2.27.0

## What's Changed
* chore: Bump the xunit group with 3 updates by @​dependabot[bot] in Testably/aweXpect#800
* chore: Bump the mstest group with 2 updates by @​dependabot[bot] in Testably/aweXpect#801
* feat: allow customization of the `MaximumStringLength` by @​vbreuss in Testably/aweXpect#802
* chore: update docusaurus to v3.9.1 by @​vbreuss in Testably/aweXpect#803
* fix: formatting of nullable types by @​vbreuss in Testably/aweXpect#808
* chore: Bump the mstest group with 2 updates by @​dependabot[bot] in Testably/aweXpect#805
* chore: Bump the nunit group with 1 update by @​dependabot[bot] in Testably/aweXpect#806
* chore: update TUnit to v0.70.0 by @​vbreuss in Testably/aweXpect#809
* feat: move framework adapters to source generation by @​vbreuss in Testably/aweXpect#810
* coverage: ensure that `NaN` is considered equal to `NaN` by @​vbreuss in Testably/aweXpect#811
* chore: bump the aweXpect group by @​vbreuss in Testably/aweXpect#812
* chore: update aweXpect.Core to v2.25.0 by @​vbreuss in Testably/aweXpect#813
* feat: support MSTest v4 by @​vbreuss in Testably/aweXpect#814


**Full Changelog**: Testably/aweXpect@v2.26.0...v2.27.0

## 2.26.0

## What's Changed
* feat: add string property result by @​vbreuss in Testably/aweXpect#795
* feat: support direct check for boolean is `true` by @​vbreuss in Testably/aweXpect#797
* chore: update aweXpect.Core to v2.24.0 by @​vbreuss in Testably/aweXpect#798


**Full Changelog**: Testably/aweXpect@v2.25.0...v2.26.0

## 2.25.0

## What's Changed
* refactor!: make `IStringMatchType` asynchronous by @​vbreuss in Testably/aweXpect#787
* refactor: make `EquivalencyExpectationBuilder` public by @​vbreuss in Testably/aweXpect#788
* chore: bump aweXpect.Core to v2.22.0 by @​vbreuss in Testably/aweXpect#789
* fix: handle `null` in `It.Is` by @​vbreuss in Testably/aweXpect#790
* fix: correct error message for prefix/suffix of empty strings by @​vbreuss in Testably/aweXpect#791
* chore: bump the aweXpect group by @​vbreuss in Testably/aweXpect#792
* feat: add `WithoutMessage` for delegate assertions by @​vbreuss in Testably/aweXpect#793


**Full Changelog**: Testably/aweXpect@v2.24.0...v2.25.0

Commits viewable in [compare view](Testably/aweXpect@v2.24.0...v2.28.0).
</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking change The changes require a new major version refactor A change or improvement without functional impact state: released The issue is released

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants